package com.innerchic.sponsor.other;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * 注册事件的方法对象注解
 * 标识当前方法被注册监听
 */
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface Subject {

    /**
     * 标识是否打开
     *
     * @return true打开
     */
    boolean isOpen() default true;

    //标识线程模型,监听执行的线程
    /**
     * 自适应,调用方法在哪个线程,就在那个线程执行
     */
    int THREAD_AUTO = 0;
    /**
     * 调用方法在主线程执行
     */
    int THREAD_MAIN = 1;
    /**
     * 调用方法在主线程执行
     * 如果当前方法在主线程中则直接执行
     */
    int THREAD_MAIN_IF_NOT = 11;
    /**
     * 运行在子线程
     * 开启一个全新的线程来执行该方法
     */
    int THREAD_NEW = 2;
    /**
     * 运行在子线程
     * 在线程池中执行该方法
     */
    int THREAD_POOL = 3;

    /**
     * 标识线程模型
     *
     * @return 默认自适应, 调用方法在哪个线程, 就在那个线程执行
     */
    int thread() default THREAD_AUTO;

    //标识优先级
    /**
     * 高优先级
     */
    int PRIORITY_HIGH = 1;
    /**
     * 一般优先级
     */
    int PRIORITY_GENERAL = 0;
    /**
     * 低优先级
     */
    int PRIORITY_LOW = -1;

    /**
     * 标识监听优先级
     *
     * @return 默认普通
     */
    int priority() default PRIORITY_GENERAL;

}
